<?php

class UsersController extends AppController
{

//    function initDB()
//    {
//        $group = & $this->User->Group;
//        // Permite aos admins fazer tudo
//        $group->id = 1;
//        $this->Acl->allow($group, 'controllers');
//        // Permite aos gerentes acessar posts e widgets
////        $group->id = 2;
////        $this->Acl->deny($group, 'controllers');
////        $this->Acl->allow($group, 'controllers/Posts');
////        $this->Acl->allow($group, 'controllers/Widgets');
////        // Permite aos usuários apenas adicionar ou editar os posts e widgets
////        $group->id = 3;
////        $this->Acl->deny($group, 'controllers');
////        $this->Acl->allow($group, 'controllers/Posts/add');
////        $this->Acl->allow($group, 'controllers/Posts/edit');
////        $this->Acl->allow($group, 'controllers/Widgets/add');
////        $this->Acl->allow($group, 'controllers/Widgets/edit');
//        // nós adcionamos um exit para evitar que seja exibido o erro de missing views
//        echo "all done";
//        exit;
//    }

    var $uses = array('User', 'Group');
    var $helpers = array('Date');

    function beforeFilter()
    {
        parent::beforeFilter();
        //$this->Auth->allowedActions = array('*');
        $this->Auth->allowedActions = array('login', 'logout', 'register');
    }

    function login($data = null)
    {
        //$this->Session->delete('Auth.redirect');
        $this->layout = 'public_default';
        if ($this->Session->read('Auth.User')) {
            $this->Session->setFlash('Você está autenticado!');
            $userData = $this->Session->read('Auth.User');
            $userGroup = $this->Group->findById($userData['group_id']);
            $this->Auth->loginRedirect = array($userGroup['Group']['name'] => true, 'controller' => 'users', 'action' => 'profile');
            $this->redirect($this->Auth->loginRedirect);
        }
    }

    function logout()
    {
        $this->Session->setFlash('Sessão encerrada.');
        $this->redirect($this->Auth->redirect($this->Auth->logout()));
    }

    function register()
    {
        $this->layout = 'public_default';
        if (!empty($this->data)) {
            //Faz todos os usuários criados pela página de registro 'nascerem' sem permissões.
            $this->data['User']['group_id'] = 4;
            $this->User->create();
            if ($this->User->save($this->data)) {
                //Envia e-mail para o usuário registrado
                $this->Email->sendAs = 'both'; // html, text, both
                $this->Email->layout = 'email_register'; // views/elements/email/html/contact.ctp

                $this->Email->to = $this->data['User']['email'];
                $this->Email->subject = 'SGC - Usuário Autor Registrado';
                $this->Email->replyTo = 'Suporte BFGI SGC <suporte@bfgi-sgc.co.cc>';
                $this->Email->from = 'Suporte BFGI SGC <suporte@bfgi-sgc.co.cc>';

                $this->set('user',$this->data);

                if ($this->Email->send()) {
                    $this->Session->setFlash(__('O Usuário foi salvo.', true));
                    $this->redirect(array('author' => true, 'controller' => 'users', 'action' => 'profile'));
                }
            } else {
                $this->Session->setFlash(__('Erro ao salvar Usuário.', true));
            }
        }
    }

    function author_profile()
    {
        $this->layout = 'author_default';
        $userId = $this->Session->read('Auth.User.id');
        $this->set('userId', $userId);
        $this->set('congresses', $this->User->Congress->find('all', array(
                    'fields' => array('name', 'deadline_submission'),
                    'joins' => array(
                        array(
                            'table' => 'congresses_users',
                            'alias' => 'CongressesUser',
                            'type' => 'INNER',
                            'conditions' => array(
                                'Congress.id = CongressesUser.congress_id',
                                'CongressesUser.user_id = ' . $userId
                            )
                        )
                    )
                )));
    }

    function evaluator_profile()
    {
        $this->layout = 'evaluator_default';
        $userId = $this->Session->read('Auth.User.id');
        $this->set('userId', $userId);
        $congresses_data = $this->User->Congress->find('all', array(
                    'recursive' => '2',
                    'fields' => array('name', 'deadline_evaluation'),
                    'conditions' => array('Congress.deadline_evaluation >=' => date('Y-m-d')), //só mostra congressos que ainda não passaram da data de avaliação
                    'joins' => array(
                        array(
                            'table' => 'congresses_users',
                            'alias' => 'CongressesUser',
                            'type' => 'INNER',
                            'conditions' => array(
                                'Congress.id = CongressesUser.congress_id',
                                'CongressesUser.user_id = ' . $userId
                            )
                        )
                    )
                ));
        $this->set('congresses', $congresses_data);
    }

    function admin_profile()
    {
        $this->layout = 'admin_default';
    }

    function admin_index()
    {
        $this->layout = 'admin_default';
        $this->User->recursive = 0;
        $userId = $this->Session->read('Auth.User.id');
        $this->set('users', $this->paginate('User', 'User.id <> ' . $userId));
    }

    function admin_view($id)
    {
        $this->layout = 'admin_default';
        if (!$id) {
            $this->Session->setFlash(__('Usuário inexistente.', true));
            $this->redirect(array('action' => 'index'));
        }
        $this->set('user', $this->User->read(null, $id));
    }

    function admin_add()
    {
        $this->layout = 'admin_default';
        if (!empty($this->data)) {
            $this->data['User']['group_id'] = 1;
            $this->User->create();
            if ($this->User->save($this->data)) {
                $this->Session->setFlash(__('O Administrador foi salvo.', true));
            } else {
                $this->Session->setFlash(__('Erro ao salvar Administrador.', true));
            }
        }
        $this->data['User']['password'] = $this->createPassword();
    }

    function admin_edit($id = null)
    {
        $this->layout = 'admin_default';
        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Usuário inexistente.', true));
            $this->redirect(array('action' => 'index'));
        }
        if (!empty($this->data)) {
            if ($this->User->save($this->data)) {
                $this->Session->setFlash(__('O Usuário foi salvo.', true));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('Erro ao salvar Usuário', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->User->read(null, $id);
        }
        $groups = $this->User->Group->find('list');
        $this->set(compact('groups'));
    }

    function admin_delete($id = null)
    {
        if (!$id) {
            $this->Session->setFlash(__('Usuário inexistente', true));
            $this->redirect(array('action' => 'index'));
        }
        if ($this->User->delete($id)) {
            $this->Session->setFlash(__('O Usuário foi excluído.', true));
            $this->redirect(array('action' => 'index'));
        }
    }

    function coordinator_profile()
    {
        $this->layout = 'coordinator_default';
        $this->redirect(array('controller' => 'congresses', 'action' => 'index'));
    }

    function coordinator_index()
    {
        $this->layout = 'coordinator_default';
        $this->User->recursive = 0;
        $userId = $this->Session->read('Auth.User.id');
        $this->set('users', $this->paginate('User', 'User.group_id IN (2, 3) AND User.id <> ' . $userId));
    }

    function coordinator_view($id)
    {
        $this->layout = 'coordinator_default';
        if (!$id) {
            $this->Session->setFlash(__('Usuário inexistente.', true));
            $this->redirect(array('action' => 'index'));
        }
        $this->set('user', $this->User->read(null, $id));
    }

    function coordinator_addEvaluator()
    {
        $this->layout = 'coordinator_default';
        if (!empty($this->data)) {
            $this->data['User']['group_id'] = 3;
            $this->User->create();
            if ($this->User->save($this->data)) {
                $this->Session->setFlash(__('O Avaliador foi salvo.', true));
            } else {
                $this->Session->setFlash(__('Erro ao salvar Avaliador.', true));
            }
        }
        $this->data['User']['password'] = $this->createPassword();
        $this->set('areas', $this->User->Area->find('list', array('order' => 'Area.name ASC')));
    }

    function coordinator_addCoordinator()
    {
        $this->layout = 'coordinator_default';
        if (!empty($this->data)) {
            $this->data['User']['group_id'] = 2;
            $this->User->create();
            if ($this->User->save($this->data)) {
                $this->Session->setFlash(__('O Coordenador foi salvo.', true));
            } else {
                $this->Session->setFlash(__('Erro ao salvar Coordenador.', true));
            }
        }
        $this->data['User']['password'] = $this->createPassword();
    }

    function coordinator_editEvaluator($id = null)
    {
        $this->layout = 'coordinator_default';
        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Usuário inexistente.', true));
            $this->redirect(array('action' => 'index'));
        }
        if (!empty($this->data)) {
            if ($this->User->save($this->data)) {
                $this->Session->setFlash(__('O Usuário foi salvo.', true));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('Erro ao salvar Usuário', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->User->read(null, $id);
            $groups = $this->User->Group->find('list', array('conditions' => array(
                            'Group.id' => array('2', '3')
                            )));
            $this->set(compact('groups'));
            $this->set('areas', $this->User->Area->find('list', array('order' => 'Area.name ASC')));
        }
    }

    function coordinator_editCoordinator($id = null)
    {
        $this->layout = 'coordinator_default';
        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Usuário inexistente.', true));
            $this->redirect(array('action' => 'index'));
        }
        if (!empty($this->data)) {
            if ($this->User->save($this->data)) {
                $this->Session->setFlash(__('O Usuário foi salvo.', true));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('Erro ao salvar Usuário', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->User->read(null, $id);
            $this->set('areas', $this->User->Area->find('list', array('order' => 'Area.name ASC')));
            $groups = $this->User->Group->find('list', array('conditions' => array(
                            'Group.id' => array('2', '3')
                            )));
            $this->set(compact('groups'));
        }
    }

    function coordinator_delete($id = null)
    {
        if (!$id) {
            $this->Session->setFlash(__('Usuário inexistente', true));
            $this->redirect(array('action' => 'index'));
        }
        if ($this->User->delete($id)) {
            $this->Session->setFlash(__('O Usuário foi excluído.', true));
            $this->redirect(array('action' => 'index'));
        }
    }

    private function createPassword()
    {
        return substr(md5(time() * time()), 0, 7);
    }

}

?>
